package com.excel.controller;

import com.excel.bean.Product;
import com.excel.dao.ProductDao;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;


import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@RestController
public class ProductController {

    @Autowired
    private ProductDao productDao;
    String PATH=("C:\\Users\\86175\\Desktop\\水果测试excel.xls");
    @GetMapping("/daoRu")
    public  List<Product>  daoRu() throws IOException {
//创建一个集合进行存放
        List<Product> productList= new ArrayList<>();
//        将表的位置封装在一个字符串中 ！！！切记地址双斜杠 否则地址引用不通；

//       将字符串转化成流 将工作薄转化成流 用来使workbook进行读取
       FileInputStream fileInputStream= new FileInputStream(PATH);
//创建03版本的工作薄
        HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
//        根据工作薄创建出来工作表
        HSSFSheet sheet = workbook.getSheetAt(0);
//        通过工作表获得行的条数
        int RowNum = sheet.getLastRowNum();
//        遍历出来整个表中有几行内容
        for (int i = 1; i <RowNum ; i++) {
//            通过表来获取遍历出来每行中的内容
            HSSFRow row = sheet.getRow(i);
//            再来个判断 判断每行中是否存有数据，
            if (row!=null){
//                将每行都封装成一个product的对象，一行就是一个对象，因此封装为了一个集合
                List<String> list = new ArrayList<>();
//                如果存有数据则对每行中的单元格进行遍历
                for (Cell cell: row) {
//                    再次判断每个单元格中是否存在内容
                    if (cell!=null){
//                        如果不为空则直接进行
                        cell.setCellType(Cell.CELL_TYPE_STRING);//将表格统一设置成字符串类型的
                        String value = cell.getStringCellValue();//获取值 表格中的都是字符串
//                        再次进行一个判断 如果单元格中的值不为空 则进行添加
                        if (value!=null&& !"".equals(value)){
                            list.add(value);
                        }
                    }
                }
//                进行一个集合的一个判断 如果不为空则将每个集合 封装到 对象中去
                if (list.size()>0) {
//                    每一行都是product对象
                    Product product = new Product();
                    product.setPid(Integer.parseInt(list.get(0)));
                    product.setPname(list.get(1));
                    product.setPrice(Double.parseDouble(list.get(2)));
                    product.setPstock(Integer.parseInt(list.get(3)));
                    productList.add(product);
                }
            }

        }
//        保存到数据库
        productDao.saveAll(productList);
        return productList;
    }


    @GetMapping("/daoChu")
    public String daoChu() throws IOException {
        List<Product> all = productDao.findAll();
        //创建工作薄
        Workbook workbook= new HSSFWorkbook();
//        创建工作表
        Sheet sheet = workbook.createSheet("商品");
//        创建出cell样式
        CellStyle cellStyle = workbook.createCellStyle();
//        设置背景颜色
        cellStyle.setFillForegroundColor(IndexedColors.PINK.getIndex());
//          设置填充模式
        cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);

//        设置字体样式
        Font font = workbook.createFont();
        font.setFontName("黑体");
//        设置字体颜色
        font.setColor(IndexedColors.BLUE.getIndex());
//        将样式加入到方法中
        cellStyle.setFont(font);
//        创建行
        Row row = sheet.createRow(0);
//        row.createCell(0).setCellValue("商品编号");
//        row.createCell(1).setCellValue("商品名称");
//        row.createCell(2).setCellValue("商品价格");
//        row.createCell(3).setCellValue("商品库存");
//        改动样式
        Cell cell0 = row.createCell(0);
        cell0.setCellValue("商品编号");
//        将样式传入进来
        cell0.setCellStyle(cellStyle);
        Cell cell1 = row.createCell(1);
        cell1.setCellValue("商品名称");
        cell1.setCellStyle(cellStyle);
        Cell cell2 = row.createCell(2);
        cell2.setCellValue("商品价格");
        cell2.setCellStyle(cellStyle);
        Cell cell3 = row.createCell(3);
        cell3.setCellValue("商品库存");
        cell3.setCellStyle(cellStyle);

// 遍历出集合中的 从第二行数据
        for (int i = 0; i <all.size() ; i++) {
            Row row1 = sheet.createRow(i + 1);
            row1.createCell(0).setCellValue(all.get(i).getPid());
            row1.createCell(1).setCellValue(all.get(i).getPname());
            row1.createCell(2).setCellValue(all.get(i).getPrice());
            row1.createCell(3).setCellValue(all.get(i).getPstock());
        }
        FileOutputStream fileOutputStream = new FileOutputStream(PATH);
        workbook.write(fileOutputStream);
        fileOutputStream.close();

return "导出成功";
    }


    /**
     * 使用jpa进行分页查询
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/pageable/{page}/{size}")
    public  Page<Product>  jap(int page, int size ){
        PageRequest of = PageRequest.of(page-1, size);
        Page<Product> all = productDao.findAll(of);
        return all;
    }


    @GetMapping("/queryAll")
    public  List<Product> queryAll(){
        List<Product> list = productDao.add();
        return list;
    }
}
